Object Oriented Programming systems and processes have been the subject of much investigation and interest in state of the art data processing environments. Object Oriented Programming is a computer program packaging technique which provides reusable and easily expandable programs. In contrast with known functional programming techniques which are not easily adaptable to new functional requirements and new types of data, object oriented programs are reusable and expandable as new requirements arise. With the ever increasing complexity of computer based systems, object oriented programming has received increased attention and investigation.
In an object oriented programming system, the primary focus is on data, rather than functions. Object oriented programming systems are composed of a large number of "objects". An object is a data structure and a set of operations or functions that can access that data structure. The data structure may be represented as a "frame". The frame has many "slots", each of which contains an "attribute" of the data in the slot. The attribute may be a primitive (i.e. an integer or string) or an Object Reference which is a pointer to another object's instance or instances (defined below). Each operation (function) that can access the data structure is called a "method".
FIG. 1 illustrates a schematic representation of an object in which a frame is encapsulated within its methods. FIG. 2 illustrates an example of an object, in which the data structure relates to employee data, and a number of methods surround this data structure. One method, for example, obtains the age of an employee. Each defined object will usually be manifested in a number of instances. Each instance contains the particular data structure for a particular example of the object. For example, an object for individual employee named Joyce Smith is an instance of the "employee" object.
Object oriented programming systems provide two primary characteristics which allow flexible and reusable programs to be developed. These characteristics are referred to as "encapsulation" and "inheritance". As may be seen from FIG. 1, the frame is encapsulated by its methods (functions). A wall of code has been placed around each piece of data. All access to the frame is handled by the surrounding methods. Data independence is thereby provided because an object's data structure is accessed only by its methods. Only the associated methods know the internal data structure. This ensures data integrity.
The "inheritance" property of object oriented programming systems allows previously written programs to be broadened by creating new superclasses and subclasses of objects. New objects are described by how they differ from preexisting objects so that entirely new programs need not be written to handle new types of data or functions.
FIG. 3 illustrates the inheritance property. For ease of illustration, the objects are illustrated as rectangles rather than as circles, with the object name at the top of a rectangle, the frame below the object name and the methods below the frame. Referring to FIG. 3, three object classes are illustrated for "salesperson", "employee" and "person" where a salesperson is a "kind of" employee, which is a "kind of" person. In other words, salesperson is a subclass of employee and employee is the superclass of salesperson. Similarly, employee is the subclass of person and person is the superclass of employee. Each class shown includes three instances. B. Soutter, W. Tipp and B. G. Blue are salespersons. B. Abraham, K. Yates and R. Moore are employees. J. McEnro, R. Nader and R. Reagan are persons. In other words, an instance is related to its class by an "is a" relation.
Each subclass "inherits" the frame and methods of its superclass. Thus, for example, a salesperson frame inherits age and hire date objects from the employee superclass as well as promote methods. Salesperson also includes a unique quota attribute and a pay commission method. Each instance can access all methods and frames of its superclass, so that, for example, B. G. Blue can be promoted.
In an object oriented system, a high level routine requests an object to perform one of its methods by sending the object a "message" telling the object what to do. The receiving object responds to the message by choosing the method that implements the message name, executing this method and then returning control to the calling high level routine, along with the results of the method.
It will be understood by those having skill in the art that an object oriented programming system typically runs on a data processor which includes volatile memory, i.e., memory which is erased or overwritten during when a session is terminated or when power is removed from the data processor, and nonvolatile memory such as direct access storage devices (DASD-disk files) or tape files in which data is permanently stored. The volatile memory is often referred to as Random Access Memory (RAM) or simply as "memory". The nonvolatile memory is often referred to as a "database". The term database, as used herein, refers to any physical, nonvolatile data storage medium, rather than to a particular database technology or product.
As described above, object oriented programming systems provide encapsulation and inheritance of complex programs, thereby providing flexibility and reuse of programs. However, complex programs which include large numbers of objects impact system performance in three major areas: object management, message overhead and memory fragmentation.
For large numbers of objects, object management consumes an inordinate amount of system resources because an object manager must maintain a large object table or tables containing the necessary object names and pointers to their locations. The object table occupies large amount of storage, and access thereto is also time consuming. Moreover, large numbers of objects require large numbers of messages to operate upon the objects. A complicated message manager must manage these messages. Finally, every object occupies a distinct segment of memory. Memory thereby becomes fragmented into small chunks which are difficult to utilize efficiently.